#ifndef OJLB_OJ_COMMON_OJ_CODE_FILE_H_
#define OJLB_OJ_COMMON_OJ_CODE_FILE_H_
#include <sys/stat.h>
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstdio>
#include "oj_common/oj_log.h"
namespace ojlb {
namespace oj_common {


// 类定义
class OjCodeFile {
public:
    OjCodeFile(const std::string& code_file_name, const std::string& programming_language, const std::string& version = "");
    
    // get 方法
    std::string getCodeFileName() const;
    std::string getProgrammingLanguage() const;
    std::string getVersion() const;

    std::string getSourcePath() const; // 构建源文件的路径
    std::string getObjectPath() const; // 构建目标文件路径
    std::string getErrorPath() const; // 构建错误文件路径
    std::string getResultPath() const; // 构建结果文件路径
    
    bool isExistOfSourcePath() const; // 检查源文件是否真实存在
    bool isExistOfObjectPath() const; // 检查目标文件是否真实存在
    bool isExistOfErrorPath() const; // 检查错误文件是否真实存在
    bool isExistOfResultPath() const; // 检查结果文件是否真实存在

    void deleteFile(const std::string& file_path) const; // 删除对应的文件
    void deleteFile() const; // 删除相关的所有文件(重载版本)
    void writeFile(const std::string& from_str, const std::string& to_file_path) const; // 写入对应的文件
    void readFile(const std::string& from_file_path, std::string& to_str) const; // 读取对应的文件

private:
    std::string                 code_file_name_; // 文件名字
    std::string                 programming_language_; // 编程语言
    std::string                 version_; // 编程版本
    std::vector<std::string>    code_file_name_suffixs_; // 全路径名
}; // class OjCodeFile end


} // namespace oj_common end
} // namespace ojlb end
#endif